package com.hedl.practice.diyJava.regexs.study_search_and_replace.test;


import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        System.out.println("===============分割字符串============");
        String re1 = "a b c";
        String re2 = "a b  c";
        String re3 = "a, b ;; c";
        String[] split = re1.split("\\s");
        String[] split1 = re2.split("\\s");
        String[] split2 = re3.split("[\\,\\;\\s]+");

        System.out.println(Arrays.toString(split));
        System.out.println(Arrays.toString(split1));
        System.out.println(Arrays.toString(split2));

        System.out.println("==============搜索字符串================");
        String s = "the quick brown fox jumps over the lazy dog.";
        Pattern pattern = Pattern.compile("\\wo\\w");
        Matcher matcher = pattern.matcher(s);
        /**
         * 我们获取到Matcher对象后，不需要调用matches()方法（因为匹配整个串肯定返回false），
         * 而是反复调用find()方法，在整个串中搜索能匹配上\\wo\\w规则的子串，并打印出来
         * 因为我们搜索的规则是3个字符：中间必须是o，前后两个必须是字符[A-Za-z0-9_]。
         */
        while(matcher.find()){
            String substring = s.substring(matcher.start(), matcher.end());
            System.out.println(substring);
        }

        System.out.println("==================替换字符串================");
        /**
         * 使用正则表达式替换字符串可以直接调用String.replaceAll()，它的第一个参数是正则表达式，第二个参数是待替换的字符串。
         */
        String s1 = "The     quick\t\t brown   fox  jumps   over the  lazy dog.";
        String s2 = s1.replaceAll("\\s+", " ");
        System.out.println(s2);

        System.out.println("========================反向引用======================");
        String s3 = "the quick brown fox jumps over the lazy dog.";
        String s4 = s3.replaceAll("\\s([a-z]{4})\\s", " <b>$1</b> ");
        System.out.println(s4);
        /**
         * 把任何4字符单词的前后用<b>xxxx</b>括起来。实现替换的关键就在于" <b>$1</b> "，它用匹配的分组子串([a-z]{4})替换了$1。
         */
    }
}
